package coop.tecso.capacitaciones.threads.printer;

import coop.tecso.capacitaciones.threads.logger.MessageLogger;

public class PrintNumbers implements Runnable {

	private int lastNumber;
	private String linePrefix;
	private long sleepMillis;
	private MessageLogger logger;

	/**
	 * Imprime los numeros del 1 a lastNumber en un logger Espera una cantidad
	 * de milisegundos entre cada impresion.
	 * 
	 * @param linePrefix
	 *            Prefijo a imprimir en cada linea
	 * @param lastNumber
	 *            ultimo numero a imprimir
	 * @param sleepMillis
	 *            milisegundos de espera entre impresiones
	 * @param logger
	 *            logger donde se imprimiran los numeros
	 */
	public PrintNumbers(String linePrefix, int lastNumber, int sleepMillis,
			MessageLogger logger) {
		super();
		assert (lastNumber > 0);
		this.lastNumber = lastNumber;
		this.linePrefix = linePrefix;
		this.sleepMillis = sleepMillis;
		this.logger = logger;
	}

	@Override
	public void run() {
		try {
			// imprime los numeros del 1 a lastNumber en el logger
			for (int i = 1; i < lastNumber + 1; i++) {
				logger.print(linePrefix + ": " + i);
				// espera "sleepMillis" milisegundos entre cada impresion
				Thread.sleep(sleepMillis);
			}

			// al terminar imprime una linea de finalizacion
			logger.print(linePrefix + ":  --- FIN ");
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}
